// src/api/http.js
import axios from 'axios';
import store from '@/store';
import { Message } from 'element-ui'; // 假设你使用 Element UI 的 Message 组件

// 创建 axios 实例
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, // 设置你的基础 URL
    timeout: 5000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        store.dispatch('showLoading');
        // 在发送请求之前做些什么，比如添加 token
        console.log(store);

        if (store.state.token) {
            config.headers['Authorization'] = `Bearer ${store.state.token}`;
        }
        config.headers['User-Agent'] = 'Apifox/1.0.0 (https://apifox.com)';
        config.headers['Host'] = 'doujia-api.luerdog.com';
        return config;
    },
    error => {
        // 对请求错误做些什么
        store.dispatch('hideLoading');
        console.error('Request Error:', error);
        Message.error('请求错误，请稍后再试');
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    res => {
        store.dispatch('hideLoading');
        console.log(res);

        if (res.data.code != 10000) {
            // 假设 code 为 10000 表示请求成功
            Message.error(res.message || '请求失败，请稍后再试');
            return Promise.reject(new Error(res.message || '请求失败'));
        }
        return res.data;
    },
    error => {
        store.dispatch('hideLoading');
        let errorMessage = '请求失败，请稍后再试';

        if (error && error.response && error.response.status) {
            console.log(error.response.status, error.response);

            // 请求已发出但服务器响应的状态码不在 2xx 范围内
            switch (error.response.status) {
                case 400:
                    errorMessage = '请求错误 (400)';
                    break;
                case 401:
                    errorMessage = error.response.data?.message || '未授权，请重新登录 (401)';
                    localStorage.removeItem('token'); // 清除无效 Token
                    if (this.$route.path !== '/login') { // 避免重复跳转
                        this.$router.push({ path: '/login' });
                    }
                    console.error('Unauthorized Error:', error.response.data || error.message)
                    break;
                case 403:
                    errorMessage = '拒绝访问 (403)';
                    break;
                case 404:
                    errorMessage = '请求地址出错 (404)';
                    break;
                case 500:
                    errorMessage = '服务器内部错误 (500)';
                    break;
                case 501:
                    errorMessage = '服务未实现 (501)';
                    break;
                case 502:
                    errorMessage = '网关错误 (502)';
                    break;
                case 503:
                    errorMessage = '服务不可用 (503)';
                    break;
                case 504:
                    errorMessage = '网关超时 (504)';
                    break;
                default:
                    errorMessage = `请求错误 (${error.response.status})`;
            }
        } else if (error.request) {
            // 请求已发出但没有收到响应
            errorMessage = '请求超时，请稍后再试';
        } else {
            // 一些设置请求时发生错误
            errorMessage = '请求配置错误';
        }
        console.error('Response Error:', error);
        Message.error(errorMessage);
        return Promise.reject(error);
    }
);

export default service;